const ModelBase = require("server/models/base");
var mongoose = require("mongoose");
var Schema = mongoose.Schema;

class ModelInterfaceCase extends ModelBase {
	getName() {
		return "interface_case";
	}

	getSchema() {
		return {
			casename: { type: String /*  required: true */ },
			uid: { type: Number /* required: true */ },
			usecaseCode: { type: String, default: "function run(){}" },
			col_id: { type: Number /*  required: true */ },
			index: { type: Number, default: 0 },
			project_id: { type: Number, required: true },
			interface_id: { type: Number, required: true },
			add_time: Number,
			up_time: Number,
			case_env: { type: String },
			req_params: [
				{
					name: String,
					value: String
				}
			],
			req_headers: [
				{
					name: String,
					value: String
				}
			],
			req_query: [
				{
					name: String,
					value: String,
					enable: { type: Boolean, default: true }
				}
			],

			req_body_form: [
				{
					name: String,
					value: String,
					enable: { type: Boolean, default: true }
				}
			],
			req_body_other: String,
			test_res_body: String,
			test_status: { type: String, enum: ["ok", "invalid", "error", ""] },
			test_res_header: Schema.Types.Mixed,
			mock_verify: { type: Boolean, default: false },
			enable_script: { type: Boolean, default: false },
			test_script: String
		};
	}

	save(data) {
		let m = new this.model(data);
		return m.save();
	}

	//获取全部测试接口信息
	getInterfaceCaseListCount() {
		return this.model.countDocuments({});
	}

	get(id) {
		return this.model
			.findOne({
				_id: id
			})
			.exec();
	}
	getAll(interface_id) {
		return this.model
			.find({
				interface_id
			})
			.exec();
	}

	list(col_id, select) {
		select = select || "casename uid col_id _id index interface_id project_id";
		if (select === "all") {
			return this.model
				.find({
					col_id: col_id
				})
				.exec();
		}
		return this.model
			.find({
				col_id: col_id
			})
			.select(select)
			.exec();
	}

	del(id) {
		return this.model.remove({
			_id: id
		});
	}

	delByProjectId(id) {
		return this.model.remove({
			project_id: id
		});
	}

	delByInterfaceId(id) {
		return this.model.remove({
			interface_id: id
		});
	}

	delByCol(id) {
		return this.model.remove({
			col_id: id
		});
	}

	up(id, data) {
		data.up_time = xU.time();
		return this.model.update({ _id: id }, data);
	}

	upCaseIndex(id, index) {
		return this.model.update(
			{
				_id: id
			},
			{
				index: index
			}
		);
	}
}

module.exports = ModelInterfaceCase;
